Query এবং Scan এর Performance Optimization

Database Tutorials - ডাইনামোডিবি (DynamoDB) DynamoDB Performance Tuning |
215
215

DynamoDB তে Query এবং Scan দুটি অপারেশন ডেটা রিট্রিভ করার জন্য ব্যবহৃত হয়, তবে তাদের পারফরম্যান্স উন্নত করার জন্য কিছু কৌশল অনুসরণ করা প্রয়োজন। Query অপারেশন সাধারণত Scan অপারেশন থেকে অনেক দ্রুত, কারণ এটি নির্দিষ্ট Partition Key (এবং Sort Key) এর ভিত্তিতে ডেটা অনুসন্ধান করে। তবে, Scan যখন প্রয়োজনীয় ডেটার পরিমাণ খুব বেশি, তখন তা সিস্টেমের পারফরম্যান্সে নেতিবাচক প্রভাব ফেলতে পারে।

এখানে Query এবং Scan অপারেশনের পারফরম্যান্স অপটিমাইজ করার জন্য কিছু পরামর্শ দেওয়া হলো:


Query Performance Optimization:

  1. Proper Indexing:

    • Global Secondary Indexes (GSI) এবং Local Secondary Indexes (LSI) ব্যবহার করে আপনার Query অপারেশনের পারফরম্যান্স অপটিমাইজ করতে পারেন। এই ইনডেক্সগুলি সুনির্দিষ্ট অ্যাট্রিবিউটের ভিত্তিতে দ্রুত Query করতে সাহায্য করে।
    • উদাহরণস্বরূপ, যদি আপনি ProductID এর ভিত্তিতে একাধিক Query করতে চান, তবে GSI তৈরি করে Category এবং Price এর উপর Sort Key ব্যবহার করতে পারেন।
    aws dynamodb update-table \
    --table-name Products \
    --attribute-definitions \
      AttributeName=Category,AttributeType=S \
      AttributeName=Price,AttributeType=N \
    --global-secondary-index-updates \
      "[{\"Create\":{\"IndexName\":\"CategoryPriceIndex\",\"KeySchema\":[{\"AttributeName\":\"Category\",\"KeyType\":\"HASH\"},{\"AttributeName\":\"Price\",\"KeyType\":\"RANGE\"}],\"Projection\":{\"ProjectionType\":\"ALL\"},\"ProvisionedThroughput\":{\"ReadCapacityUnits\":5,\"WriteCapacityUnits\":5}}]"
    
  2. Efficient Use of KeyConditionExpression:

    • KeyConditionExpression এর মাধ্যমে আপনি Partition Key এবং Sort Key এর কন্ডিশন চিহ্নিত করতে পারেন। Query অপারেশনটি দ্রুত হয় যদি আপনি কেবলমাত্র নির্দিষ্ট Partition Key (এবং Sort Key) এর উপর কুয়েরি চালান।

    উদাহরণ:

    response = table.query(
        KeyConditionExpression=Key('UserID').eq('12345') & Key('OrderDate').between('2023-01-01', '2023-12-31')
    )
    
  3. Limit the Return Data:

    • ProjectionExpression ব্যবহার করে আপনি কেবলমাত্র নির্দিষ্ট অ্যাট্রিবিউট ফেরত পেতে পারেন, যাতে আপনার Query দ্রুত হয় এবং প্রয়োজনীয় ডেটার পরিমাণ কম থাকে।

    উদাহরণ:

    response = table.query(
        KeyConditionExpression=Key('UserID').eq('12345'),
        ProjectionExpression="UserName, Email"
    )
    
  4. Pagination (Result Limiting):

    • বড় ডেটাসেটের ক্ষেত্রে Pagination ব্যবহার করে একসাথে অনেক ডেটা ফেরত পেতে না গিয়ে, ছোট ছোট অংশে ডেটা রিটার্ন করুন। এটি Query এর পারফরম্যান্সে উল্লেখযোগ্য উন্নতি করতে পারে।
    • LastEvaluatedKey ব্যবহার করে আপনি পরবর্তী পেজের জন্য Key পেতে পারেন।
    response = table.query(
        KeyConditionExpression=Key('UserID').eq('12345'),
        ExclusiveStartKey=last_evaluated_key
    )
    

Scan Performance Optimization:

Scan অপারেশন সাধারণত কম কার্যকরী এবং বেশি সময় নেয় কারণ এটি পুরো টেবিল স্ক্যান করে। তবে, কিছু কৌশল অনুসরণ করে Scan এর পারফরম্যান্স উন্নত করা সম্ভব।

  1. FilterExpression ব্যবহার করুন:

    • FilterExpression ব্যবহার করে আপনি Scan অপারেশনটি আরও নির্দিষ্ট করতে পারেন। এটি সার্চ করা ডেটার পরিমাণ কমিয়ে ফেলে, যদিও পুরো টেবিল স্ক্যান করা হয়। তবে, এটি আরও বেশি ফিল্টারেড ফলাফল প্রদান করতে সাহায্য করে।

    উদাহরণ:

    response = table.scan(
        FilterExpression=Attr('Price').gt(100) & Attr('Category').eq('Electronics')
    )
    
  2. Use ProjectionExpression:

    • ProjectionExpression ব্যবহার করে শুধুমাত্র প্রয়োজনীয় অ্যাট্রিবিউটগুলি রিটার্ন করুন। এটি ডেটার পরিমাণ কমাবে এবং Scan অপারেশনের গতি বাড়াবে।

    উদাহরণ:

    response = table.scan(
        ProjectionExpression="ProductID, ProductName, Price"
    )
    
  3. Use Parallel Scans:

    • বড় টেবিল স্ক্যানের জন্য আপনি Parallel Scan ব্যবহার করতে পারেন, যেখানে টেবিলটি একাধিক ভাগে বিভক্ত হয়ে Scan অপারেশন চালানো হয়। এটি সময় কমাতে সাহায্য করে। তবে, সাবধানে ব্যবহার করুন, কারণ এটি ডেটাবেসে অধিক লোড তৈরি করতে পারে।

    উদাহরণ:

    response = table.scan(
        TotalSegments=4,
        Segment=0  # 0 to 3 for parallel scans
    )
    
  4. Limit the Scan Size:

    • Limit প্যারামিটার ব্যবহার করে আপনি কতগুলো আইটেম ফিরিয়ে আনবেন তা নির্ধারণ করতে পারেন। এটি একটি নির্দিষ্ট সংখ্যক রেকর্ডের মধ্যেই সীমাবদ্ধ থাকবে এবং Scan অপারেশনটি দ্রুত সম্পন্ন হবে।

    উদাহরণ:

    response = table.scan(
        Limit=100  # Limit the scan to 100 items
    )
    

Query এবং Scan এর মধ্যে পারফরম্যান্সের তুলনা:

বৈশিষ্ট্যQueryScan
পারফরম্যান্সদ্রুত, পারফরম্যান্স অপটিমাইজডধীর, পুরো টেবিল স্ক্যান করা হয়
ডেটা রিটার্ননির্দিষ্ট Partition Key এবং Sort Key ব্যবহার করে ফিল্টার করা হয়পুরো টেবিলের সব ডেটা স্ক্যান করা হয়
অপশনাল ফিল্টারFilterExpression দিয়ে ফিল্টার করা যেতে পারেFilterExpression দিয়ে ফিল্টার করা যেতে পারে
ইন্ডেক্সGSI এবং LSI ব্যবহার করা যেতে পারেসাধারণত ইনডেক্স ব্যবহার করা হয় না
পেজিনেশনLastEvaluatedKey ব্যবহার করা হয়ExclusiveStartKey এবং প্যারালেল স্ক্যান

উপসংহার:

  • Query অপারেশনটির মাধ্যমে ডেটা দ্রুত এবং কার্যকরীভাবে পাওয়ার জন্য Primary Key এবং Secondary Indexes এর ব্যবহার করা উচিত। যখন আপনি টেবিলের নির্দিষ্ট অংশের ডেটা খুঁজছেন, তখন Query অপারেশনটি সবচেয়ে উপযুক্ত।
  • Scan সাধারণত কম কার্যকরী, কিন্তু যখন আপনি পুরো টেবিল স্ক্যান করতে চান বা Indexes ব্যবহার করা সম্ভব না, তখন এটি কার্যকর হতে পারে। তবে, ডেটার পরিমাণ বেশি হলে Scan অপারেশনের গতি বাড়াতে FilterExpression, ProjectionExpression, এবং Parallel Scan ব্যবহার করুন।

Query অপারেশনের মাধ্যমে সর্বদা পারফরম্যান্স এবং খরচ কমানো সম্ভব, যেখানে আপনি টেবিলের একদম নির্দিষ্ট অংশ অনুসন্ধান করেন।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion